package _02_async;

import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendCallback;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.exception.RemotingException;

import java.io.UnsupportedEncodingException;

// Producer: 生产者 发送异步消息
public class AsyncProducer {
    public static void main(String[] args) throws MQClientException, UnsupportedEncodingException, RemotingException, InterruptedException {
//        1. 创建生产者对象 defaultproducer 指定生产者的组名
        DefaultMQProducer producer = new DefaultMQProducer("async-producer");

//        2. producer 连接NameServer
        producer.setNamesrvAddr("127.0.0.1:9876");
        producer.start();

        for (int i = 0; i < 10; i++) {
            //        3. 准备消息
            Message message = new Message("my-toic",("异步消息"+i).getBytes("utf-8"));
//        4. 发送消息 （topic tags）， 准备异步回调方法，实现
            producer.send(message, new SendCallback() {
                // 异步发送是没有返回值的
                @Override
                public void onSuccess(SendResult sendResult) {
                    // 消息发送成功
                    System.out.println(sendResult);
                }

                @Override
                public void onException(Throwable e) {
                    // 消息发送失败，有异常,打印堆栈详细
                    e.printStackTrace();
                }
            });
        }



//        5. 释放资源 异步发送不要关闭资源 : connect to [127.0.0.1:9876] fa
       // producer.shutdown();
    }
}
